package nowCoder;

import java.util.*;

public class HJ8 {
    /*
    描述
        数据表记录包含表索引index和数值value（int范围的正整数），请对表索引相同的记录进行合并，
        即将相同索引的数值进行求和运算，输出按照index值升序进行输出。
        提示:
        0 <= index <= 11111111
        1 <= value <= 100000
        输入描述：
        先输入键值对的个数n（1 <= n <= 500）
        接下来n行每行输入成对的index和value值，以空格隔开
        输出描述：
        输出合并后的键值对（多行）
     */
    public static void main1(String[] args) {
        Scanner in = new Scanner(System.in);
        int x = in.nextInt();
        Map<Integer,Integer> map = new HashMap<>();
        List<Integer> list = new ArrayList<>();
        for(int i = 0 ; i < x ; i ++){
            int a = in.nextInt();
            int b = in.nextInt();
            Integer temp = map.get(a);
            if(temp == null){
                map.put(a,b);
                list.add(a);
            }
            else
                map.put(a, b + temp);
        }
        list.sort(Comparator.comparing(Integer::intValue));
        for(int i:list){
            System.out.println(i+" "+map.get(i));
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] x = new int[n][2];
        int[] y = new int[n];
        for (int i = 0; i < n; i++) {
            int ne = sc.nextInt();
            x[i][0] = ne;
            int xt = sc.nextInt();
            x[i][1] = xt;
        }
        for(int i = 0; i < n; i++){
            for(int j = i+1; j<n; j++){
                if(x[i][0] == x[j][0]){
                    x[i][1] += x[j][1];
                    x[j][0] = -1;
                    continue;
                }
                if(x[i][0] > x[j][0]){
                    int[] tem = x[i];
                    x[i] = x[j];
                    x[j] = tem;
                }
            }
        }
        for(int i = 0; i< n; i++){
            if(x[i][0] != -1){
                System.out.println(x[i][0]+" "+x[i][1]);
            }
        }
    }
}
